#ifndef MEMORIACOMPARTIDAPISOS_H_
#define MEMORIACOMPARTIDAPISOS_H_

#include "Semaforo.h"
#include "MemoriaCompartida.h"
#include "Logger.h"


class MonitorPisos {

private:

	int cantidadPisos;
	Semaforo** semPisos;
	MemoriaCompartida<int>* mcPisos;
	Logger* logger;

	void crearSemaforos();

	void inicializarSem();

	int crearMc();

	void inicializarMc();

	void liberarMc();

	void escribirMc(int piso, int cantidad, int offset, const char op);

	void log(std::string message);

	void sync(std::string message);

	void debug(std::string message);


public:

	MonitorPisos(int cantidadPisos);

	~MonitorPisos();

	void liberarSem();

	/**
	 * Lo hace la persona. Es individual.
	 */
	void incrementar(int piso, const char estado);

	/**
	 * Necesitamos bloquear el piso para la lectura
	 */
	int bloquearPiso(int piso, const char sentido);
	/**
	 * Lo hace el ascensor. Y especifica la cantidad.
	 */
	void actualizar(int piso, const char sentido, int cantidad);
	/**
	 * Lo usa el Controlador Central.
	 */
	int leer(int piso, const char sentido);

	void inicializar();


};

#endif /* MEMORIACOMPARTIDAPISOS_H_ */
